#!/usr/bin/env node

/**
 * 图标生成脚本
 * 从 icon.jpg 生成 Windows (.ico), macOS (.icns) 和 Linux (.png) 图标
 *
 * 使用方法:
 * 1. npm install sharp --save-dev
 * 2. node build-icons.js
 */

const sharp = require('sharp')
const fs = require('fs')
const path = require('path')

const INPUT_IMAGE = path.join(__dirname, 'public', 'icon.jpg')
const OUTPUT_DIR = path.join(__dirname, 'public')

// 需要生成的尺寸
const SIZES = {
  png: [16, 24, 32, 48, 64, 128, 256, 512, 1024],
  ico: [16, 24, 32, 48, 64, 128, 256] // ICO 文件包含多个尺寸
}

async function generateIcons() {
  try {
    console.log('开始生成图标文件...')
    console.log('源文件:', INPUT_IMAGE)

    // 检查源文件是否存在
    if (!fs.existsSync(INPUT_IMAGE)) {
      throw new Error(`源图标文件不存在: ${INPUT_IMAGE}`)
    }

    // 1. 生成 PNG 图标（用于 Linux 和 macOS）
    console.log('\n生成 PNG 图标...')
    for (const size of SIZES.png) {
      const outputPath = path.join(OUTPUT_DIR, `icon_${size}x${size}.png`)
      await sharp(INPUT_IMAGE)
        .resize(size, size, {
          fit: 'contain',
          background: { r: 0, g: 0, b: 0, alpha: 0 }
        })
        .png()
        .toFile(outputPath)
      console.log(`  ✓ 生成 ${size}x${size} PNG`)
    }

    // 2. 生成主要的 icon.png (256x256)
    const mainPngPath = path.join(OUTPUT_DIR, 'icon.png')
    await sharp(INPUT_IMAGE)
      .resize(256, 256, {
        fit: 'contain',
        background: { r: 0, g: 0, b: 0, alpha: 0 }
      })
      .png()
      .toFile(mainPngPath)
    console.log('  ✓ 生成主 icon.png (256x256)')

    console.log('\n✅ 图标生成完成！')
    console.log('\n注意事项:')
    console.log('1. Windows .ico 文件需要使用专门的工具生成（推荐使用在线工具或 Photoshop）')
    console.log('2. macOS .icns 文件需要在 Mac 上使用 iconutil 命令生成')
    console.log('3. 或者使用在线工具如: https://cloudconvert.com/jpg-to-ico')
    console.log('\n生成的文件:')
    console.log('  - public/icon.png (Linux 应用图标)')
    console.log('  - public/icon_*.png (各种尺寸的 PNG 图标)')
    console.log('\n手动创建步骤:')
    console.log('1. Windows (.ico): 将 icon.jpg 上传到 https://convertio.co/zh/jpg-ico/ 转换')
    console.log('2. macOS (.icns): 将 icon.jpg 上传到 https://cloudconvert.com/jpg-to-icns 转换')
    console.log('3. 下载后放到 public/ 目录下')

  } catch (error) {
    console.error('❌ 生成图标失败:', error.message)
    console.error('\n请确保已安装 sharp:')
    console.error('  npm install sharp --save-dev')
    process.exit(1)
  }
}

// 检查是否安装了 sharp
try {
  require.resolve('sharp')
  generateIcons()
} catch (e) {
  console.error('❌ 未找到 sharp 模块')
  console.error('\n请先安装 sharp:')
  console.error('  npm install sharp --save-dev')
  console.error('\n然后再运行:')
  console.error('  node build-icons.js')
  process.exit(1)
}
